#!/bin/bash

#1、遍历项目下所有java文件
#2、结合git提交记录和当前java文件是否包含版权信息进行处理
#2.1 git提交记录>1，若包含OpenTSDB的版权信息则追加我们的版权信息，若不包含OpenTSDB的版权信息且不包含tsdb的版权信息则在该java文件首行增加tsdb版权信息
#2.2 git提交记录=1, 若不包含OpenTSDB的版权信息且不包含tsdb版权信息，则在首行增加tsdb版权信息，否则该文件为第一次初始化且包含版权信息的java文件，不做改动

function dfs
{
  local now_dir now_file
  now_dir=$1
  for now_file in $(ls ${now_dir})
  do
    #获取所有的java文件
    if [[ -f $now_file ]] && [[ $now_file =~ '.java' ]]
    then
      local filename=${now_dir}/${now_file}
      #git提交次数
      local commit_times=`git log --oneline $filename | wc -l`
      #文件中存在OpenTSDB的版权，0-包含 1-不包含
      cat ${filename} | grep 'The OpenTSDB Authors' > /dev/null
      local contain_other_org_copyright=$(echo $?)
      #文件中不存在TSDB的版权，0-包含 1-不包含
      cat ${filename} | grep 'TeleDB Development Group' > /dev/null
      local contain_tsdb_copyright=$(echo $?)

      #存在多次git提交记录，表示我们修改过该java文件，这里未commit过的文件不做处理
      if [[ $commit_times -gt 1 ]]
      then
	      #如果存在OpenTSDB的版权，且不存在tsdb的版权，则在其他版权所在行的后面追加tsdb的版权
	      if [[ $contain_other_org_copyright -eq 0 ]] && [[ ${contain_tsdb_copyright} -eq 1 ]]
	      then
	        local line=`cat -n $filename | grep 'The OpenTSDB Authors' | awk '{print $1}'`
	        sed -i ''"${line}"'a\'"${tsdb_copyright_one_line}"'' ${filename}
	      #如果不存在OpenTSDB的版权，并且不存在tsdb的版权，则在该java文件头部增加tsdb版权信息
	      elif [[ $contain_tsdb_copyright -eq 1 ]]
	      then
	        local line=1
	        cat ${tsdb_copyright_content} | while read line_content
	        do
	           sed -i ''"$line"'i\'"$line_content"'' ${filename}
	           let line+=1
	        done
	      fi

      #如果commit_times=1表示只有一次提交记录，可能是我们新增的，也可能是初始化源码的第一次
      elif [[ $commit_times -eq 1 ]]
        then
          #如果不存在OpenTSDB的版权信息，并且不存在tsdb版权信息，则增加tsdb的版权信息
          if [[  $contain_other_org_copyright -eq 1 ]] && [[ ${contain_tsdb_copyright} -eq 1 ]]
          then
            local line=1
            cat ${tsdb_copyright_content} | while read line_content
            do
              sed -i ''"$line"'i\'"$line_content"'' ${filename}
              let line+=1
            done
          fi
      fi
    fi
  done

  for now_file in $(ls ${now_dir})
  do
    if [ -d $now_file ]
    then
      cd ${now_file}
      dfs ${now_dir}/${now_file}
      cd ..
    fi
  done
}

tsdb_copyright_one_line="// Copyright (C) 2017 TeleDB Development Group"
tsdb_copyright_content="tsdb_copyright.txt"
if [ -f $1 ]
then
  echo "the input is a file"
else
  dfs $1
fi
